{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 💹🚀 Building a Stock Analyzer with WaterCrawl × Claude 3.7 × E2B × Tavily\n",
    "\n",
    "Welcome to this **step-by-step Jupyter Notebook** where you'll unleash powerful financial analysis using the latest AI & scraping tools:\n",
    "\n",
    "1. 🕷️ **WaterCrawl** – Lightning-fast, customizable web crawling for up-to-date stock info\n",
    "2. 🤖 **Claude 3.7** – Expert-level financial analysis and crisp, structured insights\n",
    "3. 📊 **E2B Code Interpreter** – Instantly visualize your findings, in-code!\n",
    "4. 🔎 **WaterCrawl Search API** – Find just the right stock pages (so you're always using the freshest data!)\n",
    "\n",
    "---\n",
    "\n",
    "### What will you learn? 👨‍🎓👩‍💻\n",
    "\n",
    "- How to set up WaterCrawl + API keys in minutes\n",
    "- 🕸️ Crawl and extract financial data, zero HTML hassle\n",
    "- 📈 Supercharge stock insights using Claude 3.7\n",
    "- 📊 Generate pretty Python charts from your AI analysis\n",
    "- 💡 Pro tips for reliable, robust data scraping and analytics\n",
    "\n",
    "---\n",
    "\n",
    "#### 🔑 **What do you need?**\n",
    "\n",
    "| Service       | Key Purpose                | Where to generate                               |\n",
    "|--------------|---------------------------|-------------------------------------------------|\n",
    "| WaterCrawl   | Search andCrawl anything            | [Get API key](https://app.watercrawl.dev/dashboard/api-keys)     |\n",
    "| Anthropic    | Power Claude 3.7          | [Get API key](https://console.anthropic.com/settings/keys)       |\n",
    "| E2B          | In-notebook code & plots  | [Get API key](https://app.e2b.dev/)             |\n",
    "\n",
    "Let's begin! 🎉"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 1. 🚦 Setup and Installation\n",
    "\n",
    "> **Install all dependencies in one go!**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install watercrawl-py anthropic e2b-code-interpreter python-dotenv matplotlib requests"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 2. 📦 Import Required Libraries\n",
    "\n",
    "> Bring in the packages you'll use for everything from crawling to charting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from watercrawl import WaterCrawlAPIClient\n",
    "import anthropic\n",
    "from e2b_code_interpreter import Sandbox\n",
    "import base64\n",
    "import json\n",
    "from dotenv import load_dotenv\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import Image, display\n",
    "import requests"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 3. 🔑 Load Environment Variables\n",
    "\n",
    "> **Never hardcode your API keys!** Store them safely in a `.env` file for peace of mind 💼🔒\n",
    "\n",
    "A sample `.env` should look like:\n",
    "```env\n",
    "WATERCRAWL_API_KEY=sk-... \n",
    "ANTHROPIC_API_KEY=sk-ant-... \n",
    "E2B_API_KEY=pk-e2b-... \n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ All clients initialized!\n"
     ]
    }
   ],
   "source": [
    "# Load environment variables from .env\n",
    "load_dotenv()\n",
    "\n",
    "# Retrieve API keys\n",
    "watercrawl_api_key = os.getenv(\"WATERCRAWL_API_KEY\")\n",
    "anthropic_api_key = os.getenv(\"ANTHROPIC_API_KEY\")\n",
    "e2b_api_key = os.getenv(\"E2B_API_KEY\")\n",
    "\n",
    "# Initialize clients\n",
    "watercrawl_client = WaterCrawlAPIClient(api_key=watercrawl_api_key)\n",
    "claude_client = anthropic.Anthropic(api_key=anthropic_api_key)\n",
    "sandbox = Sandbox(api_key=e2b_api_key)\n",
    "\n",
    "print(\"✅ All clients initialized!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 4. 🛠️ Define Helper Functions\n",
    "\n",
    "> These functions stitch together the search, crawl, and analysis magic! 🪄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "def find_relevant_stock_pages(stock_symbol, base_url, client):\n",
    "    \"\"\"🔎 Find relevant stock pages using WaterCrawl Web Search\"\"\"\n",
    "    print(f\"Searching WaterCrawl for 📈 stock: {stock_symbol} on {base_url}\")\n",
    "    try:\n",
    "        search = client.create_search_request(\n",
    "            query=f\"{stock_symbol} stock analysis site:{base_url}\",\n",
    "            search_options={\n",
    "                \"depth\": \"basic\",\n",
    "                \"language\": \"en\",\n",
    "                \"country\": \"us\",\n",
    "                \"time_range\": \"month\",\n",
    "                \"search_type\": \"web\"\n",
    "            },\n",
    "            result_limit=4,\n",
    "            sync=True,\n",
    "            download=True\n",
    "        )\n",
    "        urls = [hit[\"url\"] for hit in search['result'] if \"url\" in hit]\n",
    "        print(f\"🔗 Found {len(urls)} relevant pages!\")\n",
    "        return urls\n",
    "    except Exception as e:\n",
    "        print(f\"⚠️ Error finding stock pages: {str(e)}\")\n",
    "        return []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def analyze_stock_data(stock_pages, client):\n",
    "    \"\"\"\n",
    "    🤖 Analyze stock data using Claude 3.7\n",
    "    \"\"\"\n",
    "    if not stock_pages:\n",
    "        print(\"❌ No pages provided for analysis!\")\n",
    "        return None\n",
    "    try:\n",
    "        stock_contents = []\n",
    "        print(\" 📚 Found pages:\", stock_pages)\n",
    "        for page_url in stock_pages[:5]: \n",
    "            print(\" 📚 Scraping page:\", page_url) # Only the top 5\n",
    "            try:\n",
    "                scrape_result = watercrawl_client.scrape_url(\n",
    "                    url=page_url,\n",
    "                    page_options={\n",
    "                        \"exclude_tags\": [\"nav\", \"footer\"],\n",
    "                        \"include_tags\": [\"article\", \"main\"],\n",
    "                        \"wait_time\": 1500,\n",
    "                        \"include_html\": False,\n",
    "                        \"only_main_content\": True\n",
    "                    }\n",
    "                )\n",
    "                stock_contents.append({\n",
    "                    'url': page_url,\n",
    "                    'content': scrape_result.get('result', {}).get('markdown', '')\n",
    "                })\n",
    "            except Exception as e:\n",
    "                print(f\"⚠️ Error scraping {page_url}: {str(e)}\")\n",
    "        \n",
    "        if not stock_contents:\n",
    "            print(\"😢 No content scraped from pages!\")\n",
    "            return None\n",
    "        \n",
    "        analyze_prompt = \"\"\"\n",
    "You are a financial analyst. Based on the following stock information, analyze and provide your analysis in VALID JSON format.\n",
    "\n",
    "IMPORTANT:\n",
    "1. Your ENTIRE response must be valid JSON that can be parsed by Python's json.loads() function\n",
    "2. Use double quotes for JSON keys and string values, not single quotes\n",
    "3. Ensure all strings are properly escaped\n",
    "4. Do not include any text, explanations, or markdown before or after the JSON\n",
    "\n",
    "The JSON structure must follow exactly this format:\n",
    "{\n",
    "  \"company_overview\": \"Brief overview of the company\",\n",
    "  \"financial_health\": \"Analysis of financial position\",\n",
    "  \"growth_potential\": \"Assessment of growth opportunities\",\n",
    "  \"risk_factors\": \"Key risks to consider\",\n",
    "  \"investment_score\": 75 // A number between 0-100\n",
    "}\n",
    "\n",
    "Stock Information:\n",
    "\"\"\"\n",
    "        for stock in stock_contents:\n",
    "            analyze_prompt += f\"\\nURL: {stock['url']}\\nContent: {stock['content']}\\n\"\n",
    "        \n",
    "        # Claude 3.7 call\n",
    "        completion = client.messages.create(\n",
    "            model=\"claude-3-7-sonnet-20250219\",\n",
    "            max_tokens=1300,\n",
    "            temperature=0,\n",
    "            system=\"You are a financial analyst who ALWAYS returns responses in valid, parseable JSON format. Never include explanations or text outside the JSON object.\",\n",
    "            messages=[{\"role\": \"user\", \"content\": analyze_prompt}]\n",
    "        )\n",
    "        response_text = completion.content[0].text\n",
    "        try:\n",
    "            json_start = response_text.find('{')\n",
    "            json_end = response_text.rfind('}') + 1\n",
    "            if json_start != -1 and json_end != 0:\n",
    "                json_str = response_text[json_start:json_end]\n",
    "                return json.loads(json_str)\n",
    "            else:\n",
    "                print('⚠️ Claude did not return valid JSON. Output:')\n",
    "                print(response_text)\n",
    "                return None\n",
    "        except json.JSONDecodeError as e:\n",
    "            print(f'⚠️ JSON parsing error: {str(e)}')\n",
    "            print('Full response:', response_text)\n",
    "            return None\n",
    "    except Exception as e:\n",
    "        print(f'⚠️ Error analyzing stock data: {str(e)}')\n",
    "        return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "def visualize_analysis(analysis_result):\n",
    "    \"\"\"\n",
    "    📊 Visualize the stock analysis results with a beautiful chart!\n",
    "    \"\"\"\n",
    "    try:\n",
    "        plt.figure(figsize=(5, 5))\n",
    "        plt.bar(['Investment Score'], [analysis_result['investment_score']], color='skyblue')\n",
    "        plt.ylim(0, 100)\n",
    "        plt.title('Stock Investment Analysis Score')\n",
    "        plt.ylabel('Score (higher = better)')\n",
    "        plt.tight_layout()\n",
    "        plt.close()\n",
    "        # Show inline in notebook\n",
    "        display(Image('stock_analysis.png'))\n",
    "        print(\"\\n🔍 **Detailed Insights**\")\n",
    "        print(f\"- **Company Overview**: {analysis_result['company_overview']}\")\n",
    "        print(f\"- **Financial Health**: {analysis_result['financial_health']}\")\n",
    "        print(f\"- **Growth Potential**: {analysis_result['growth_potential']}\")\n",
    "        print(f\"- **Risk Factors**: {analysis_result['risk_factors']}\")\n",
    "        print(f\"- **Investment Score**: {analysis_result['investment_score']}/100\")\n",
    "    except Exception as e:\n",
    "        print(f'⚠️ Visualization error: {str(e)}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 5. 🏁 Main Analysis Function\n",
    "\n",
    "> The \"easy button\" for stock analysis: runs search, scrape, AI, and chart in one call!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 6. 🎬 Run the Analysis!\n",
    "\n",
    "Ready to test? Just type a ticker (e.g. `AAPL`, `TSLA`, `GOOG`, `NFLX`) and watch the pipeline go! 🚦"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "=== 🏦 Starting analysis for: AAPL ===\n",
      "Searching WaterCrawl for 📈 stock: AAPL on https://finance.yahoo.com\n",
      "🔗 Found 4 relevant pages!\n",
      " 📚 Found pages: ['https://finance.yahoo.com/quote/AAPL/', 'https://finance.yahoo.com/quote/AAPL/analysis/', 'https://finance.yahoo.com/quote/AAPL/history/', 'https://finance.yahoo.com/news/apple-inc-aapl-among-stocks-021614536.html']\n",
      " 📚 Scraping page: https://finance.yahoo.com/quote/AAPL/\n",
      " 📚 Scraping page: https://finance.yahoo.com/quote/AAPL/analysis/\n",
      " 📚 Scraping page: https://finance.yahoo.com/quote/AAPL/history/\n",
      " 📚 Scraping page: https://finance.yahoo.com/news/apple-inc-aapl-among-stocks-021614536.html\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAH0CAYAAADFQEl4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPHpJREFUeJzt3QeYVNX9P/6DSFMBRQQ0omIXey+oxGDEEnuMRo3Ye8XyhdhixRhjjYohRsXYY+yVoBErFuwaG0SxIBaKoqDC/J/P+T2z/91lUcpwl919vZ5nws6dO/eeuTNjzntOa1YqlUoJAACgAPMVcRIAAIAggAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEYA41a9YsHXnkkfVdDBq4a6+9Nn+W/ve//1X82HHMOHacA6C+CSBAg/PZZ5+lY445Jq288sqpTZs2qVOnTmmDDTZI//d//5e+/vrrqv1uvPHGdPHFF6d52TLLLJN+9atfpYaiIVzTso8//jj94Q9/SC+99NIsP/eKK67IFfYNN9xwrpStoXviiSfSNttsk372s5+l1q1bp6WWWiptv/32+fMB8FMEEKBQr7/+emrZsmVaaKGF6rzFY++9994Mn//ll1+m9dZbLw0ePDhtt9126dJLL019+/ZNyy+/fLryyivT559/3iAryw1FQwsgZ5xxxmwFkBtuuCGHw2effTa9++67qaFbeuml07fffpt+97vfzfGxbrvttrT55punTz/9NP8QcNlll6W99947jRs3Lg0aNKgi5QUat/nruwBA01IqlXJrRfyCWpeNNtoo7zMjV199dfrggw/Sk08+mTbZZJMaj02cODEHGJgTo0aNSk899VT617/+lQ455JAcRk4//fTUkEVrTrRUVEK0KnXv3j0988wz033fxo4dm4oS/52YPHlybgUFGhYtIECDEq0jzZs3z0Gltnbt2lVVsn7+85+n++67L73//vu58hW3+EW7ekXpgAMOSJ07d87PWXPNNdN111033TGnTZuWLrnkkrT66qvn/RZbbLG09dZbp+eff/5Hy3n22Wen+eabL/86PDt99S+44IL017/+NS233HKpVatWaf3110/PPfdc1X7xeOwXr6+2/v3754ph/CJdNnz48Fzu9u3bpwUWWCD17Nkzh7jqvvrqq3Tsscfm6xTnjK5tv/zlL9OIESN+8pr+5z//yfdvvfXW3OoQXXPatm2bfv3rX6cJEyakKVOm5GPHMaOla7/99svbavvHP/6R1l133Vyp7NChQ9pjjz3S6NGja+wT5VhttdXSG2+8kbbYYov8euJ8559/ftU+UZ64ZiHOVS7vzIyBiMCxyCKL5Ba2KH/cn933Kbzyyitp3333Tcsuu2z+DHXp0iXtv//+6YsvvvjRcvTp0yd17Ngxff/999M9ttVWW6WVVlqp6v6QIUPSpptumhZeeOF8feOx3//+99OVt/rrHzNmTL42Sy65ZC774osvnnbcccefHIMS38F4nXWF/Xh/Z/X788MPP6Szzjqr6hrGZyrKXvvzUe6u+NBDD+VW0PiMXHXVVfmx8ePH589X165d8zGiRfSPf/xjPj8w79ECAjS4riRTp05N119/fa6gzcjJJ5+cK74ffvhhuuiii/K2qJiF6IoSldjoWhODx7t165a7lUQlMSoy0a2kLEJKVNqiv/uBBx6YK0uPP/54/vU3KkF1OeWUU9K5556bK0cHHXTQbHd1ikAQv8BHxTEq17vssksaOXJkatGiRfrNb36TTjrppFzhP/HEE2s8N7ZFBTUq0eGRRx7J5Y+KffySH8HommuuSb/4xS/ya4kWqXDooYemf/7zn/maxC/cUUGOlqo333wzrbPOOj96TcsGDBiQK4b9+vXL1zcCWJQ3zhmBKH49j2sX1zSu+2mnnVb13HPOOSedeuqp+bXFtY6xPvH86O7z4osv5sp1WRwrKrJxTWL/KHeMAYqKbrzWVVZZJZ155pn5+AcffHDabLPN8vNqt5rVJQJHHDcq2L/97W9z174IFeVAMyvvUzkcxP2o7Ef4iG6IEVri37gW8by6RHep6GoYFe7q44QiOMR7Wm6ViePE42ussUZ+zVEBj2tfO2DWtuuuu+bnHnXUUblyH6E8yhotjNXDel3fwaFDh+bPQYSXHzMz35/YHuE/wt7xxx+fw3J8juJzd8cdd9Q43ltvvZXfk7je8d2KoPXNN9/kQP3RRx/l7TEeJVqwIoh/8sknDabLIDQpJYACvfrqq6UePXrM8PENN9yw9M4778zw8TFjxpQWW2yx6KNVWnnllUuHHnpo6cYbbyyNHz9+un2322670tJLLz3d9osvvjg//x//+EfVtu+++6608cYblxZaaKHSxIkT87ZHHnkk73f00UdPd4xp06ZV/R37HHHEEfnv448/vjTffPOVrr322tLMiPJFOctGjRqVj7fooouWvvzyy6rtd911V95+zz33VG2L8q677ro1jvfss8/m/QYPHlxVzhVWWKHUu3fvGmX+5ptvSt26dSv98pe/rNrWvn37qtcxIzO6po8++mg+72qrrZavZdlvf/vbUrNmzUrbbLNNjf2j7NWP87///a/UvHnz0jnnnDPd52X++eevsb1nz541XmOYMmVKqUuXLqVdd921attzzz2X97vmmmtKM+v555/PzxkyZEi+H9dsySWXLB1zzDE19puV9ymudW033XRT3m/YsGFV26KcsS2OHaZOnZrPvfvuu9d47oUXXpiv6ciRI/P9iy66KD/vs88+m+HrKpe3fC3GjRuX7//pT38qzaqrr746P7dly5alLbbYonTqqaeWHn/88Vze6mbm+/PSSy/lfQ488MAaj59wwgl5exyjLD4vse3BBx+sse9ZZ51VWnDBBUtvv/12je39+vXLn6kPPvhgll8jMHfpggU0KNFl6uWXX86/1sev4AMHDkx77rln7voR3Th+bPxI2f33359/iY5fUsvi1+qjjz46z6L12GOP5W233357/nW6rv7/tX+1jvNGy0F0N4luRD/WOjMzdt9996oWjFD+BT9+Sa++zwsvvFBj0P4tt9ySfwGPrjQhBmC/8847+RpFi0YM0o/bpEmTUq9evdKwYcOquqlEC0P8+hyDt2fXPvvsU/XLf4hZpOLaRJej6mJ7dK2KX8RDjLeIckRrRrmMcYv3aYUVVkiPPvpojedHy0sMfC6L1opoyal+fWZHtH7EZyy6dpXf57jON998c255m533qfoYhRizEK+r3IWw3L2tLtFqtNdee6W77747t7JUL2O05EQLUii3DN11110z3eUoyhTXLLqqVe+qNzPivXzwwQdzK2K0kMX3Ll53vE/R8lA2M9+f+C6GmEiiumgJCdHlr7p4zb17966xLVov4/zxPlT/7Gy55Zb5PYvPODBvEUCABif6qke3mOheEV0yYias6Fse3W1ikPpPiTEMUVmKCl510W2n/HiIiv0SSyyRxyL8lOgqc/nll+cuQ9WDzeyKbiTVlSu51SuLu+22W34NETpCVPSjMhbdXWI8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oDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQmPmLOxWz6rwXP6/vIgAAMA/qt3bH1FBpAQEAAAojgAAAAIURQAAAgMI0uAAyderUdOqpp6Zu3bqlNm3apOWWWy6dddZZqVQqVe0Tf5922mlp8cUXz/tsueWW6Z133qnXcgMAAA0wgPzxj39MV155ZfrLX/6S3nzzzXz//PPPT5dddlnVPnH/0ksvTQMHDkzDhw9PCy64YOrdu3eaPHlyvZYdAACaugY3C9ZTTz2Vdtxxx7Tddtvl+8sss0y66aab0rPPPlvV+nHxxRenU045Je8XBg8enDp37pzuvPPOtMcee9Rr+QEAoClrcC0gm2yySRo6dGh6++238/2XX345PfHEE2mbbbbJ90eNGpXGjBmTu12VtW/fPm244Ybp6aefnuFxp0yZkiZOnFjjBgAANPEWkH79+uVwsPLKK6fmzZvnMSHnnHNO2muvvfLjET5CtHhUF/fLj9VlwIAB6YwzzpjLpQcAgKatwbWA3HrrremGG25IN954YxoxYkS67rrr0gUXXJD/nRP9+/dPEyZMqLqNHj26YmUGAAAaaAvIiSeemFtBymM5Vl999fT+++/nFow+ffqkLl265O2ffvppngWrLO6vtdZaMzxuq1at8g0AAJh7GlwLyDfffJPmm69msaMr1rRp0/LfMT1vhJAYJ1IWXbZiNqyNN9648PICAAANuAVk++23z2M+llpqqbTqqqumF198MV144YVp//33z483a9YsHXvssenss89OK6ywQg4ksW7IEksskXbaaaf6Lj4AADRpDS6AxHofESgOP/zwNHbs2BwsDjnkkLzwYNlJJ52UJk2alA4++OA0fvz4tOmmm6YHH3wwtW7dul7LDgAATV2zUvUlxKnRbSum740B6e3atauXMpz34uf1cl4AAOZt/dbu2GDryQ1uDAgAANBwCSAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwsxfiYNMmTIlDR8+PL3//vvpm2++SYsttlhae+21U7du3SpxeAAAoJGYowDy5JNPpksuuSTdc8896fvvv0/t27dPbdq0SV9++WUOJcsuu2w6+OCD06GHHpratm1buVIDAABNqwvWDjvskHbfffe0zDLLpIcffjh99dVX6YsvvkgffvhhbgV555130imnnJKGDh2aVlxxxTRkyJDKlhwAAGg6LSDbbbdduv3221OLFi3qfDxaP+LWp0+f9MYbb6RPPvlkTsoJAAA0ArPdAnLIIYfk8DF16tQ0bNiwNH78+Bnu271799SrV6/ZPRUAANBIzPEsWM2bN09bbbVVGjduXGVKBAAANFoVmYZ3tdVWSyNHjqzEoQAAgEasIgHk7LPPTieccEK6995781iPiRMn1rgBAABUbB2QbbfdtmpmrGbNmlVtL5VK+X6MEwEAAKhIAHn00UcrcRgAAKCRq0gA6dmzZyUOAwAANHIVGQMSHn/88bT33nunTTbZJH300Ud52/XXX5+eeOKJSp0CAABo4CoSQGJBwt69e6c2bdqkESNGpClTpuTtEyZMSOeee24lTgEAADQCFZsFa+DAgWnQoEE1Vkbv0aNHDiQAAAAVCyBvvfVW2nzzzafb3r59+x9dIR0AAGhaKhJAunTpkt59993ptsf4j2WXXbYSpwAAABqBigSQgw46KB1zzDFp+PDhed2Pjz/+ON1www15ccLDDjusEqcAAAAagYpMw9uvX780bdq01KtXr/TNN9/k7litWrXKAeSoo46qxCkAAIBGoCIBJFo9Tj755HTiiSfmrlhff/116t69e1pooYUqcXgAAKCRqEgXrP333z999dVXqWXLljl4bLDBBjl8TJo0KT8GAABQsQBy3XXXpW+//Xa67bFt8ODBrjQAADDnXbAmTpyYSqVSvkULSOvWrasemzp1arr//vtTp06d5uQUAABAIzJHAWThhRfO4z/ituKKK073eGw/44wz5uQUAABAIzJHAeTRRx/NrR+/+MUv0u233546dOhQ9ViMB1l66aXTEkssUYlyAgAATT2A9OzZM/87atSotNRSS+UWj9o++OCD/BgAAEBFBqHHauefffbZdNu/+OKL1K1bt0qcAgAAaAQqEkCiG1ZdYj2Q6gPTAQCApm2OumD17ds3/xtdr0477bS0wAIL1JgFa/jw4Wmttdaa81ICAACNwhwFkBdffLGqBeTVV1/NA8/L4u8111wznXDCCXNeSgAAoFGY41mwwn777ZcuueSS1K5du0qVCwAAaIQqMgbkmmuuyeHj3XffTQ899FDVqugzGhsCAAA0TRUJIF9++WXq1atXXoxw2223TZ988knefsABB6Tjjz++EqcAAAAagYoEkGOPPTa1aNEir/lRfSD67rvvnh588MFUaR999FHae++906KLLpratGmTVl999fT8889XPR4tLzEofvHFF8+Pb7nllumdd96peDkAAIB6CCAPP/xw+uMf/5iWXHLJGttXWGGF9P7776dKGjduXOrRo0cOPA888EB644030p///Oe0yCKLVO1z/vnnp0svvTQNHDgwz8S14IILpt69e6fJkydXtCwAAECBg9DLJk2aVKPlo3rXrFatWqVKiqDTtWvXPO6krPpih9H6cfHFF6dTTjkl7bjjjnnb4MGDU+fOndOdd96Z9thjj4qWBwAAKLgFZLPNNsuV/LJYF2TatGm5JWKLLbZIlXT33Xen9dZbL+22226pU6dOae21106DBg2qenzUqFFpzJgxudtVWfv27dOGG26Ynn766YqWBQAAqIcWkAgaMQg9xmF899136aSTTkqvv/56bgF58sknUyWNHDkyXXnllXkRxN///vfpueeeS0cffXRed6RPnz45fIRo8agu7pcfq8uUKVPyrWzixIkVLTcAAFChFpDVVlstvf3222nTTTfN3Z6iS9Yuu+ySFypcbrnlUiVFy8o666yTzj333Nz6cfDBB6eDDjooj/eYEwMGDMgtJeVbdPMCAADmwRaQEJX2k08+Oc1tMbNV9+7da2xbZZVV0u23357/7tKlS/73008/zfuWxf211lprhsft379/blWp3gIihAAAwDwaQGJ2qquvvjq9+eab+X6EhFghvUOHDqmSYgast956q8a2aH1ZeumlqwakRwgZOnRoVeCIMBGzYR122GEzPG4Mlq/0gHkAAGAudMEaNmxYWmaZZfLUtxFE4hZ/RxiIxyrpuOOOS88880zughUrr994443pr3/9azriiCOqBsDHuiRnn312HrD+6quvpn322SctscQSaaeddqpoWQAAgHpoAYnKfyw6GIPDmzdvnrdNnTo1HX744fmxCAGVsv7666c77rgjd5k688wzc8iJaXf32muvqn1iEHyMQ4nxIePHj89jU2JBxNatW1esHAAAwKxrVoqFM+ZQrDb+0ksvpZVWWqnG9ugqFd2gvv3229TQRLetGNcyYcKE1K5du3opw3kvfl4v5wUAYN7Wb+2ODbaeXJEuWDErVXnsR3Wxbc0116zEKQAAgKbcBeuVV16p+jvW4TjmmGPymIyNNtoob4txGpdffnk677zzKlNSAACg6XbBmm+++fKA7596euwT40EaGl2wAACYV/VrwF2wZrsFZNSoUbP7VAAAoIma7QBSXncDAACg0EHoAAAAM0MAAQAACiOAAAAAhRFAAACAwgggAABAwwsg2223Xfrkk0+m+xsAAKDiAWTYsGHp22+/ne5vAACAMl2wAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAA0vACy9NJLpxYtWkz3NwAAQNn8qUJee+21Ov8GAAAo0wULAAAojAACAAAURgABAAAKI4AAAAANJ4BMnTo1DRs2LI0fP74yJQIAABqtOQ4gzZs3T1tttVUaN25cZUoEAAA0WhXpgrXaaqulkSNHVuJQAABAI1aRAHL22WenE044Id17773pk08+SRMnTqxxAwAAqNhChNtuu23+d4cddkjNmjWr2l4qlfL9GCcCAABQkQDy6KOPVuIwAABAI1eRANKzZ89KHAYAAGjkKrYOyOOPP5723nvvtMkmm6SPPvoob7v++uvTE088UalTAAAADVxFAsjtt9+eevfundq0aZNGjBiRpkyZkrdPmDAhnXvuuZU4BQAA0AhUbBasgQMHpkGDBqUWLVpUbe/Ro0cOJAAAABULIG+99VbafPPNp9vevn17K6QDAACVDSBdunRJ77777nTbY/zHsssuW4lTAAAAjUBFAshBBx2UjjnmmDR8+PC87sfHH3+cbrjhhrw44WGHHVaJUwAAAI1ARabh7devX5o2bVrq1atX+uabb3J3rFatWuUActRRR1XiFAAAQCNQkQASrR4nn3xyOvHEE3NXrK+//jp17949LbTQQpU4PAAA0EhUJICUtWzZMgcPAACAuRZAJk2alM4777w0dOjQNHbs2Nwdq7qRI0dW4jQAAEADV5EAcuCBB6bHHnss/e53v0uLL7547pIFAAAwVwLIAw88kO6777688CAAAMBcnYZ3kUUWSR06dKjEoQAAgEasIgHkrLPOSqeddlqeghcAAKDiXbDWXnvtGmM9Yvrdzp07p2WWWSa1aNGixr4jRoyY3dMAAACNyGwHkJ122qmyJQEAABq92Q4gp59+emVLAgAANHoVGQMCAABQ2DS8MQtWXWt/xLbWrVun5ZdfPu27775pv/32q8TpAACAphxAYgasc845J22zzTZpgw02yNueffbZ9OCDD6YjjjgijRo1Kh122GHphx9+SAcddFAlTgkAADTVAPLEE0+ks88+Ox166KE1tl911VXp4YcfTrfffntaY4010qWXXiqAAABAE1aRMSAPPfRQ2nLLLafb3qtXr/xY2HbbbdPIkSMrcToAAKApB5BYBf2ee+6ZbntsK6+QPmnSpNS2bdtKnA4AAGjKXbBOPfXUPMbj0UcfrRoD8txzz6X7778/DRw4MN8fMmRI6tmzZyVOBwAANOUAEuM6unfvnv7yl7+kf/3rX3nbSiutlB577LG0ySab5PvHH398JU4FAAA09QASevTokW8AAAAVDyATJ05M7dq1q/r7x5T3AwAAmrb552TxwU8++SR16tQpLbzwwnUuRFgqlfL2qVOnzmk5AQCAphxAHnnkkaoZrmLwOQAAwFwLINVntDK7FQAAUOgg9PHjx6dnn302jR07Nk2bNq3GY/vss0+lTgMAADT1ABILDu61117p66+/zgPOq48Hib8FEAAAoGIroccaH/vvv38OINESMm7cuKrbl19+6UoDAACVCyAfffRROvroo9MCCyxQicMBAACNVEUCSO/evdPzzz9fiUMBAACN2GyPAbn77rur/t5uu+3SiSeemN544420+uqrpxYtWtTYd4cddpizUgIAAE07gOy0007TbTvzzDOn22YhQgAAYI4DSO2pdgEAAAoZAwIAADBXA8jNN9880/uOHj06Pfnkk7N7KgAAoKkHkCuvvDKtssoq6fzzz09vvvnmdI9PmDAh3X///WnPPfdM66yzTvriiy/mtKwAAEBTHQPy2GOP5ZmwLrvsstS/f/+04IILps6dO6fWrVvnBQjHjBmTOnbsmPbdd9/02muv5ccAAICmbbYDSHl63bh9/vnn6Yknnkjvv/9++vbbb3PwWHvttfNtvvkMMwEAAP6fiqSDCBwxLe8xxxyT+vXrlw488MC07rrrFhI+zjvvvDzV77HHHlu1bfLkyemII45Iiy66aFpooYXSrrvumj799NO5XhYAAODHNejmieeeey5dddVVaY011qix/bjjjkv33HNPuu2223JXsY8//jjtsssu9VZOAACggQeQr7/+Ou21115p0KBBaZFFFqkx+P3qq69OF154YfrFL36RW2Kuueaa9NRTT6VnnnmmXssMAABNXYMNINHFarvttktbbrllje0vvPBC+v7772tsX3nlldNSSy2Vnn766XooKQAAUJFB6PUl1iAZMWJE7oJVW8y+1bJly7TwwgvX2B6zcMVjMzJlypR8K5s4cWKFSw0AAFS0BeS7775Lb731Vvrhhx/S3BKLGsZg9xtuuCFP+VspAwYMSO3bt6+6de3atWLHBgAAKhhAvvnmm3TAAQekBRZYIK266qrpgw8+yNuPOuqoPEtVJUUXq7Fjx+bFDeeff/58i4Hml156af47WjoiCI0fP77G82IWrC5duszwuLGWSYwfKd8i6AAAAPNgAInK+8svv5z+85//1GiViHEYt9xyS6qkXr16pVdffTW99NJLVbf11lsvD0gv/92iRYs0dOjQqudEq0yEoo033niGx23VqlVq165djRsAADAPjgG58847c9DYaKON8pocZdEa8t5776VKatu2bVpttdVqbItV2GPNj/L2aI3p27dv6tChQw4S0RIT4SPKBwAANPAA8tlnn6VOnTpNt33SpEk1AklRLrroorwIYixAGAPLe/funa644orCywEAAMyFABLdnu67777c0hDKoeNvf/vbj3Z7qpTo+lVddAO7/PLL8w0AAGhkAeTcc89N22yzTXrjjTfyDFiXXHJJ/jsW/4sB4gAAABUbhL7pppvmQegRPlZfffX08MMP5y5ZsfBfrEQOAABQkRaQWHX8kEMOSaeeemoaNGiQqwoAAMy9FpCY8vb222+f08MAAABNQEW6YO200055Kl4AAIC5Pgh9hRVWSGeeeWZ68skn85iPWJejuqOPProSpwEAABq4ZqVSqTSnB+nWrduMT9CsWRo5cmRqaCZOnJjat2+fJkyYUG+rop/34uf1cl4AAOZt/dbu2GDryRVpARk1alQlDgMAADRyFRkDUl00qFSgUQUAAGiEKhZABg8enNcAadOmTb6tscYa6frrr6/U4QEAgEagIl2wLrzwwrwOyJFHHpl69OiRtz3xxBPp0EMPTZ9//nk67rjjKnEaAACggatIALnsssvSlVdemfbZZ5+qbTvssENaddVV0x/+8AcBBAAAqFwXrE8++SRtsskm022PbfEYAABAxQLI8ssvn2699dbptt9yyy15jRAAAICKdcE644wz0u67756GDRtWNQYkFiUcOnRoncEEAABomirSArLrrrum4cOHp44dO6Y777wz3+LvZ599Nu28886VOAUAANAIVKQFJKy77rrpH//4R6UOBwAANEIVaQG5//7700MPPTTd9tj2wAMPVOIUAABAI1CRANKvX780derU6bbHiujxGAAAQMUCyDvvvJO6d+8+3faVV145vfvuu640AABQuQDSvn37NHLkyOm2R/hYcMEFK3EKAACgEahIANlxxx3Tsccem957770a4eP444/PK6IDAABULICcf/75uaUjulx169Yt31ZZZZW06KKLpgsuuMCVBgAAKjcNb3TBeuqpp9KQIUPSyy+/nNq0aZPWWGONtPnmm1fi8AAAQCNRsXVAmjVrlrbaaqt8AwAAqHgXrKeffjrde++9NbYNHjw4d8Hq1KlTOvjgg9OUKVPm5BQAAEAjMkcB5Mwzz0yvv/561f1XX301HXDAAWnLLbfM63/cc889acCAAZUoJwAA0NQDyEsvvZR69epVdf/mm29OG264YRo0aFDq27dvuvTSS9Ott95aiXICAABNPYCMGzcude7cuer+Y489lrbZZpuq++uvv34aPXr0nJUQAABoNOYogET4GDVqVP77u+++SyNGjEgbbbRR1eNfffVVatGixZyXEgAAaBTmKIBsu+22eazH448/nvr3758WWGCBtNlmm1U9/sorr6TllluuEuUEAACa+jS8Z511Vtpll11Sz54900ILLZSuu+661LJly6rH//73v5uWFwAAqEwA6dixYxo2bFiaMGFCDiDNmzev8fhtt92WtwMAAFR0JfS6dOjQwVUGAAAqMwYEAABgVgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIVpcAFkwIABaf31109t27ZNnTp1SjvttFN66623auwzefLkdMQRR6RFF100LbTQQmnXXXdNn376ab2VGQAAaKAB5LHHHsvh4plnnklDhgxJ33//fdpqq63SpEmTqvY57rjj0j333JNuu+22vP/HH3+cdtlll3otNwAAkFKzUqlUSg3YZ599lltCImhsvvnmacKECWmxxRZLN954Y/r1r3+d9/nvf/+bVllllfT000+njTbaaKaOO3HixNS+fft8vHbt2qX6cN6Ln9fLeQEAmLf1W7tjvZ17TuvJDa4FpLZ44aFDhw753xdeeCG3imy55ZZV+6y88sppqaWWygFkRqZMmZIvZvUbAABQWQ06gEybNi0de+yxqUePHmm11VbL28aMGZNatmyZFl544Rr7du7cOT/2Y2NLIsmVb127dp3r5QcAgKamQQeQGAvy2muvpZtvvnmOj9W/f//cmlK+jR49uiJlBAAA/n/zpwbqyCOPTPfee28aNmxYWnLJJau2d+nSJX333Xdp/PjxNVpBYhaseGxGWrVqlW8AAMDc0+BaQGLMfISPO+64Iz3yyCOpW7duNR5fd911U4sWLdLQoUOrtsU0vR988EHaeOON66HEAABAg20BiW5XMcPVXXfdldcCKY/riHEbbdq0yf8ecMABqW/fvnlgeozMP+qoo3L4mNkZsAAAgLmjwQWQK6+8Mv/785//vMb2a665Ju27777574suuijNN998eQHCmN2qd+/e6YorrqiX8gIAAA04gMzMsiWtW7dOl19+eb4BAADzjgY3BgQAAGi4BBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwjTqAXH755WmZZZZJrVu3ThtuuGF69tln67tIAADQpDXaAHLLLbekvn37ptNPPz2NGDEirbnmmql3795p7Nix9V00AABoshptALnwwgvTQQcdlPbbb7/UvXv3NHDgwLTAAgukv//97/VdNAAAaLLmT43Qd999l1544YXUv3//qm3zzTdf2nLLLdPTTz9d53OmTJmSb2UTJkzI/06cODHVl8lff1Vv5wYAYN41cWLLejz3/6sfl0ql2Xp+owwgn3/+eZo6dWrq3Llzje1x/7///W+dzxkwYEA644wzptvetWvXuVZOAACYHdPXWov31Vdfpfbt28/y8xplAJkd0VoSY0bKpk2blr788su06KKLpmbNmtVr2QCauvi1LX4QGj16dGrXrl19FwegSSuVSjl8LLHEErP1/EYZQDp27JiaN2+ePv300xrb436XLl3qfE6rVq3yrbqFF154rpYTgFkT4UMAAah/s9Py0agHobds2TKtu+66aejQoTVaNOL+xhtvXK9lAwCApqxRtoCE6E7Vp0+ftN5666UNNtggXXzxxWnSpEl5ViwAAKB+NNoAsvvuu6fPPvssnXbaaWnMmDFprbXWSg8++OB0A9MBmPdFF9lY16l2V1kAGp5mpdmdPwsAAGAWNcoxIAAAwLxJAAEAAAojgAAAAIURQAAAgMIIIAAN1L777pt22mmnNK/43//+l5o1a5ZeeumlNK9YZpll8jTsP+Xll19OO+ywQ+rUqVNq3bp1fl7Mpjh27NhCygnQlAggADRpMWV7r169UocOHdJDDz2U3nzzzXTNNdekJZZYIq8fNbd8//33c+3YAPMyAQSgkfj5z3+ejj766HTSSSflynSXLl3SH/7wh6rH99xzz/yrfu1KcMeOHdPgwYPz/WnTpqUBAwakbt26pTZt2qQ111wz/fOf/6zaf9y4cWmvvfZKiy22WH58hRVWyJX1EM8Ja6+9dm4JifJUb6k599xz81pMCy+8cDrzzDPTDz/8kE488cRc1iWXXLLqOGWjR49Ov/nNb/L+sc+OO+6YW1nKyse94IIL0uKLL54WXXTRdMQRR1RV7OP877//fjruuONyeeJWlyeffDJNmDAh/e1vf8tlj9exxRZbpIsuuqjqNYXXX389/epXv0rt2rVLbdu2TZtttll67733qq5bvKZ4HbFWSXntqdqtQ7fcckvq2bNnbmW54YYb8mNx3lVWWSVvW3nlldMVV1wxy+89QEMigAA0Itddd11acMEF0/Dhw9P555+fK8VDhgzJj0VwuOeee9LXX39dtX/84v/NN9+knXfeOd+P8BFhZODAgbnCHZX3vffeOz322GP58VNPPTW98cYb6YEHHsgtBVdeeWUOMOHZZ5/N//773/9On3zySfrXv/5VdZ5HHnkkffzxx2nYsGHpwgsvzIsKRmV+kUUWyWU99NBD0yGHHJI+/PDDvH+EiN69e+eK/uOPP55DwkILLZS23nrr9N1331Ud99FHH80hIP6N137ttdfmW4jzRyCIaxDliVtdIqhFGLrjjjvSjJbG+uijj9Lmm2+ew0W8lhdeeCHtv//++XnhkksuSX/+859zGHrllVdy2aNL1zvvvFPjOP369UvHHHNMvnaxT4SQWDD3nHPOydsipMU1jtcC0GjFQoQANDx9+vQp7bjjjlX3e/bsWdp0001r7LP++uuX/u///i///f3335c6duxYGjx4cNXjv/3tb0u77757/nvy5MmlBRZYoPTUU0/VOMYBBxyQ9wvbb799ab/99quzPKNGjYrae+nFF1+crpxLL710aerUqVXbVlpppdJmm21Wdf+HH34oLbjggqWbbrop37/++uvzPtOmTavaZ8qUKaU2bdqUHnrooRrHjeeW7bbbblWvJ8TjF1100U9cyVLp97//fWn++ecvdejQobT11luXzj///NKYMWOqHu/fv3+pW7dupe+++67O5y+xxBKlc845Z7prf/jhh9e4NhdffHGNfZZbbrnSjTfeWGPbWWedVdp4441/sswADZUWEIBGZI011qhxP7omlQdSzz///LlLU7nrT4xvuOuuu3LLSHj33Xdza8gvf/nL3NpQvkWLSLmr0WGHHZZuvvnm3MUouno99dRTM1WuVVddNc033///fznRFWv11Vevut+8efPchapc1hgUHuWJFpByOaIb1uTJk6vKUj5uPLeu1zsrogVizJgxueUnjhn/RneoV199NT8eA+ujy1WLFi2me+7EiRNz606PHj1qbI/70apR3XrrrVf1d1z/eC0HHHBAjet99tln13iNAI3N/PVdAAAqp3YFOcYdxPiEsggbMQYhKunRNSvGcUS3plDumnXfffeln/3sZzWOE12PwjbbbJPHVdx///35+TF4O8ZdRNejWS3Xj5U1yrLuuutWhaXqYvzJzL7eWREBaLfddsu36AoV40HidUV3qLhOlRDd48rK13vQoEFpww03rLFf9VAF0NgIIABNyCabbJK6du2aB0PHOI6obJcr8d27d89B44MPPsghZUYiAPTp0yffolUgBpJHRb1ly5b58alTp85xOddZZ51cxpgWNwZ9z64o0+yUJ5633HLLVc2CFS1LEURibErt0BPlixmzYpxK9esW9zfYYIMZniNageJ5I0eOrGqFAmgKBBCAJiZmw4ouRm+//XYevF0W3Z1OOOGEPPA8WhE23XTTPDtUVKSjkh2BIwZMR8tEdFOaMmVKuvfee/MMTiHCQrQUxOxPMfg7ZnVq3779bJUxKuR/+tOf8sxX5dmlouUlBpZH16+4PzNiPY8Y+L7HHnvkcFUeMF9dvIboVhb7rLjiinkgegzWj1ae8sxcRx55ZLrsssvyPv3798+v65lnnskBY6WVVsohLAbWR2iJ7mnxvOi2VVcLTnVnnHFGnrksjhctUXFNn3/++TzbWN++fWfr2gHM64wBAWhionIfM1lFN6va4xbOOuusPAtTzIYVwSIqxdElqzwdbbQMRAU8WgRiVqjoKhSV9/IYk0svvTRdddVV+Zf9CA+za4EFFsjBYamllkq77LJLLkuMlYgxILPSIhLhJabAjWBQvetWddHyE+c7/vjjc3jYaKON0q233pqnx/3d735X1T0rZr+KblPRyhEhLLpOlVtDIkREYIhjxNiWCGF33313nqb4xxx44IH5PBFY4nlx7JjFq/r0vwCNTbMYiV7fhQAAAJoGLSAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAKsr/B6wLHhqmeJqBAAAAAElFTkSuQmCC",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "🔍 **Detailed Insights**\n",
      "- **Company Overview**: Apple Inc. is a leading technology company that designs, manufactures, and markets smartphones (iPhone), personal computers (Mac), tablets (iPad), wearables and accessories. The company also provides various services including Apple Arcade, Apple Music, Apple TV+, and operates platforms like the App Store. With a market cap of $3.15 trillion, Apple is one of the world's most valuable companies.\n",
      "- **Financial Health**: Apple demonstrates strong financial health with a solid balance sheet. The company has a trailing P/E ratio of 32.88, indicating premium valuation. Revenue for the trailing twelve months stands at $400.37 billion with net income of $97.29 billion. Apple maintains healthy cash reserves of $48.5 billion, though it carries some debt with a debt-to-equity ratio of 146.99%. The company generates substantial free cash flow of $97.25 billion annually, supporting its dividend yield of 0.52%.\n",
      "- **Growth Potential**: Apple shows mixed growth signals. While the company has experienced a 15.15% stock price increase over the past year, recent quarterly growth has been modest with EPS growth of 1.92% for the current quarter. The company is investing in AI technology, developing chips for smart glasses and next-generation devices. Apple faces challenges in the smartphone market with competition from Samsung's ultrathin Galaxy S25 Edge. Analyst projections indicate revenue growth of 4.12% for the current year and 6.12% for next year, suggesting steady but not explosive growth.\n",
      "- **Risk Factors**: Key risks include intense competition in the consumer electronics space, particularly from Samsung and other smartphone manufacturers. The company faces potential margin pressure with reports of iPhone price hikes unrelated to tariffs. Apple's high valuation (P/E of 32.88) creates expectations that may be difficult to meet. The company also faces regulatory challenges, including a recent $95 million Siri settlement over privacy concerns. Apple's heavy reliance on iPhone sales makes it vulnerable to smartphone market saturation and longer replacement cycles. Trade tensions between the US and China, though recently eased, remain a potential risk given Apple's global supply chain.\n",
      "- **Investment Score**: 78/100\n"
     ]
    }
   ],
   "source": [
    "analyze_stock('AAPL')   # 🍏 Feel free to try other symbols here!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "448e28a7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "=== 🏦 Starting analysis for: MSFT ===\n",
      "Searching WaterCrawl for 📈 stock: MSFT on https://finance.yahoo.com\n",
      "🔗 Found 4 relevant pages!\n",
      " 📚 Found pages: ['https://finance.yahoo.com/quote/MSFT/', 'https://finance.yahoo.com/quote/MSFT/analysis/', 'https://uk.finance.yahoo.com/quote/MSFT/', 'https://ca.finance.yahoo.com/quote/MSFT/']\n",
      " 📚 Scraping page: https://finance.yahoo.com/quote/MSFT/\n",
      " 📚 Scraping page: https://finance.yahoo.com/quote/MSFT/analysis/\n",
      " 📚 Scraping page: https://uk.finance.yahoo.com/quote/MSFT/\n",
      " 📚 Scraping page: https://ca.finance.yahoo.com/quote/MSFT/\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAH0CAYAAADFQEl4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPHpJREFUeJzt3QeYVNX9P/6DSFMBRQQ0omIXey+oxGDEEnuMRo3Ye8XyhdhixRhjjYohRsXYY+yVoBErFuwaG0SxIBaKoqDC/J/P+T2z/91lUcpwl919vZ5nws6dO/eeuTNjzntOa1YqlUoJAACgAPMVcRIAAIAggAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEYA41a9YsHXnkkfVdDBq4a6+9Nn+W/ve//1X82HHMOHacA6C+CSBAg/PZZ5+lY445Jq288sqpTZs2qVOnTmmDDTZI//d//5e+/vrrqv1uvPHGdPHFF6d52TLLLJN+9atfpYaiIVzTso8//jj94Q9/SC+99NIsP/eKK67IFfYNN9xwrpStoXviiSfSNttsk372s5+l1q1bp6WWWiptv/32+fMB8FMEEKBQr7/+emrZsmVaaKGF6rzFY++9994Mn//ll1+m9dZbLw0ePDhtt9126dJLL019+/ZNyy+/fLryyivT559/3iAryw1FQwsgZ5xxxmwFkBtuuCGHw2effTa9++67qaFbeuml07fffpt+97vfzfGxbrvttrT55punTz/9NP8QcNlll6W99947jRs3Lg0aNKgi5QUat/nruwBA01IqlXJrRfyCWpeNNtoo7zMjV199dfrggw/Sk08+mTbZZJMaj02cODEHGJgTo0aNSk899VT617/+lQ455JAcRk4//fTUkEVrTrRUVEK0KnXv3j0988wz033fxo4dm4oS/52YPHlybgUFGhYtIECDEq0jzZs3z0Gltnbt2lVVsn7+85+n++67L73//vu58hW3+EW7ekXpgAMOSJ07d87PWXPNNdN111033TGnTZuWLrnkkrT66qvn/RZbbLG09dZbp+eff/5Hy3n22Wen+eabL/86PDt99S+44IL017/+NS233HKpVatWaf3110/PPfdc1X7xeOwXr6+2/v3754ph/CJdNnz48Fzu9u3bpwUWWCD17Nkzh7jqvvrqq3Tsscfm6xTnjK5tv/zlL9OIESN+8pr+5z//yfdvvfXW3OoQXXPatm2bfv3rX6cJEyakKVOm5GPHMaOla7/99svbavvHP/6R1l133Vyp7NChQ9pjjz3S6NGja+wT5VhttdXSG2+8kbbYYov8euJ8559/ftU+UZ64ZiHOVS7vzIyBiMCxyCKL5Ba2KH/cn933Kbzyyitp3333Tcsuu2z+DHXp0iXtv//+6YsvvvjRcvTp0yd17Ngxff/999M9ttVWW6WVVlqp6v6QIUPSpptumhZeeOF8feOx3//+99OVt/rrHzNmTL42Sy65ZC774osvnnbcccefHIMS38F4nXWF/Xh/Z/X788MPP6Szzjqr6hrGZyrKXvvzUe6u+NBDD+VW0PiMXHXVVfmx8ePH589X165d8zGiRfSPf/xjPj8w79ECAjS4riRTp05N119/fa6gzcjJJ5+cK74ffvhhuuiii/K2qJiF6IoSldjoWhODx7t165a7lUQlMSoy0a2kLEJKVNqiv/uBBx6YK0uPP/54/vU3KkF1OeWUU9K5556bK0cHHXTQbHd1ikAQv8BHxTEq17vssksaOXJkatGiRfrNb36TTjrppFzhP/HEE2s8N7ZFBTUq0eGRRx7J5Y+KffySH8HommuuSb/4xS/ya4kWqXDooYemf/7zn/maxC/cUUGOlqo333wzrbPOOj96TcsGDBiQK4b9+vXL1zcCWJQ3zhmBKH49j2sX1zSu+2mnnVb13HPOOSedeuqp+bXFtY6xPvH86O7z4osv5sp1WRwrKrJxTWL/KHeMAYqKbrzWVVZZJZ155pn5+AcffHDabLPN8vNqt5rVJQJHHDcq2L/97W9z174IFeVAMyvvUzkcxP2o7Ef4iG6IEVri37gW8by6RHep6GoYFe7q44QiOMR7Wm6ViePE42ussUZ+zVEBj2tfO2DWtuuuu+bnHnXUUblyH6E8yhotjNXDel3fwaFDh+bPQYSXHzMz35/YHuE/wt7xxx+fw3J8juJzd8cdd9Q43ltvvZXfk7je8d2KoPXNN9/kQP3RRx/l7TEeJVqwIoh/8sknDabLIDQpJYACvfrqq6UePXrM8PENN9yw9M4778zw8TFjxpQWW2yx6KNVWnnllUuHHnpo6cYbbyyNHz9+un2322670tJLLz3d9osvvjg//x//+EfVtu+++6608cYblxZaaKHSxIkT87ZHHnkk73f00UdPd4xp06ZV/R37HHHEEfnv448/vjTffPOVrr322tLMiPJFOctGjRqVj7fooouWvvzyy6rtd911V95+zz33VG2L8q677ro1jvfss8/m/QYPHlxVzhVWWKHUu3fvGmX+5ptvSt26dSv98pe/rNrWvn37qtcxIzO6po8++mg+72qrrZavZdlvf/vbUrNmzUrbbLNNjf2j7NWP87///a/UvHnz0jnnnDPd52X++eevsb1nz541XmOYMmVKqUuXLqVdd921attzzz2X97vmmmtKM+v555/PzxkyZEi+H9dsySWXLB1zzDE19puV9ymudW033XRT3m/YsGFV26KcsS2OHaZOnZrPvfvuu9d47oUXXpiv6ciRI/P9iy66KD/vs88+m+HrKpe3fC3GjRuX7//pT38qzaqrr746P7dly5alLbbYonTqqaeWHn/88Vze6mbm+/PSSy/lfQ488MAaj59wwgl5exyjLD4vse3BBx+sse9ZZ51VWnDBBUtvv/12je39+vXLn6kPPvhgll8jMHfpggU0KNFl6uWXX86/1sev4AMHDkx77rln7voR3Th+bPxI2f33359/iY5fUsvi1+qjjz46z6L12GOP5W233357/nW6rv7/tX+1jvNGy0F0N4luRD/WOjMzdt9996oWjFD+BT9+Sa++zwsvvFBj0P4tt9ySfwGPrjQhBmC/8847+RpFi0YM0o/bpEmTUq9evdKwYcOquqlEC0P8+hyDt2fXPvvsU/XLf4hZpOLaRJej6mJ7dK2KX8RDjLeIckRrRrmMcYv3aYUVVkiPPvpojedHy0sMfC6L1opoyal+fWZHtH7EZyy6dpXf57jON998c255m533qfoYhRizEK+r3IWw3L2tLtFqtNdee6W77747t7JUL2O05EQLUii3DN11110z3eUoyhTXLLqqVe+qNzPivXzwwQdzK2K0kMX3Ll53vE/R8lA2M9+f+C6GmEiiumgJCdHlr7p4zb17966xLVov4/zxPlT/7Gy55Zb5PYvPODBvEUCABif6qke3mOheEV0yYias6Fse3W1ikPpPiTEMUVmKCl510W2n/HiIiv0SSyyRxyL8lOgqc/nll+cuQ9WDzeyKbiTVlSu51SuLu+22W34NETpCVPSjMhbdXWI8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oDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQmPmLOxWz6rwXP6/vIgAAMA/qt3bH1FBpAQEAAAojgAAAAIURQAAAgMI0uAAyderUdOqpp6Zu3bqlNm3apOWWWy6dddZZqVQqVe0Tf5922mlp8cUXz/tsueWW6Z133qnXcgMAAA0wgPzxj39MV155ZfrLX/6S3nzzzXz//PPPT5dddlnVPnH/0ksvTQMHDkzDhw9PCy64YOrdu3eaPHlyvZYdAACaugY3C9ZTTz2Vdtxxx7Tddtvl+8sss0y66aab0rPPPlvV+nHxxRenU045Je8XBg8enDp37pzuvPPOtMcee9Rr+QEAoClrcC0gm2yySRo6dGh6++238/2XX345PfHEE2mbbbbJ90eNGpXGjBmTu12VtW/fPm244Ybp6aefnuFxp0yZkiZOnFjjBgAANPEWkH79+uVwsPLKK6fmzZvnMSHnnHNO2muvvfLjET5CtHhUF/fLj9VlwIAB6YwzzpjLpQcAgKatwbWA3HrrremGG25IN954YxoxYkS67rrr0gUXXJD/nRP9+/dPEyZMqLqNHj26YmUGAAAaaAvIiSeemFtBymM5Vl999fT+++/nFow+ffqkLl265O2ffvppngWrLO6vtdZaMzxuq1at8g0AAJh7GlwLyDfffJPmm69msaMr1rRp0/LfMT1vhJAYJ1IWXbZiNqyNN9648PICAAANuAVk++23z2M+llpqqbTqqqumF198MV144YVp//33z483a9YsHXvssenss89OK6ywQg4ksW7IEksskXbaaaf6Lj4AADRpDS6AxHofESgOP/zwNHbs2BwsDjnkkLzwYNlJJ52UJk2alA4++OA0fvz4tOmmm6YHH3wwtW7dul7LDgAATV2zUvUlxKnRbSum740B6e3atauXMpz34uf1cl4AAOZt/dbu2GDryQ1uDAgAANBwCSAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwsxfiYNMmTIlDR8+PL3//vvpm2++SYsttlhae+21U7du3SpxeAAAoJGYowDy5JNPpksuuSTdc8896fvvv0/t27dPbdq0SV9++WUOJcsuu2w6+OCD06GHHpratm1buVIDAABNqwvWDjvskHbfffe0zDLLpIcffjh99dVX6YsvvkgffvhhbgV555130imnnJKGDh2aVlxxxTRkyJDKlhwAAGg6LSDbbbdduv3221OLFi3qfDxaP+LWp0+f9MYbb6RPPvlkTsoJAAA0ArPdAnLIIYfk8DF16tQ0bNiwNH78+Bnu271799SrV6/ZPRUAANBIzPEsWM2bN09bbbVVGjduXGVKBAAANFoVmYZ3tdVWSyNHjqzEoQAAgEasIgHk7LPPTieccEK6995781iPiRMn1rgBAABUbB2QbbfdtmpmrGbNmlVtL5VK+X6MEwEAAKhIAHn00UcrcRgAAKCRq0gA6dmzZyUOAwAANHIVGQMSHn/88bT33nunTTbZJH300Ud52/XXX5+eeOKJSp0CAABo4CoSQGJBwt69e6c2bdqkESNGpClTpuTtEyZMSOeee24lTgEAADQCFZsFa+DAgWnQoEE1Vkbv0aNHDiQAAAAVCyBvvfVW2nzzzafb3r59+x9dIR0AAGhaKhJAunTpkt59993ptsf4j2WXXbYSpwAAABqBigSQgw46KB1zzDFp+PDhed2Pjz/+ON1www15ccLDDjusEqcAAAAagYpMw9uvX780bdq01KtXr/TNN9/k7litWrXKAeSoo46qxCkAAIBGoCIBJFo9Tj755HTiiSfmrlhff/116t69e1pooYUqcXgAAKCRqEgXrP333z999dVXqWXLljl4bLDBBjl8TJo0KT8GAABQsQBy3XXXpW+//Xa67bFt8ODBrjQAADDnXbAmTpyYSqVSvkULSOvWrasemzp1arr//vtTp06d5uQUAABAIzJHAWThhRfO4z/ituKKK073eGw/44wz5uQUAABAIzJHAeTRRx/NrR+/+MUv0u233546dOhQ9ViMB1l66aXTEkssUYlyAgAATT2A9OzZM/87atSotNRSS+UWj9o++OCD/BgAAEBFBqHHauefffbZdNu/+OKL1K1bt0qcAgAAaAQqEkCiG1ZdYj2Q6gPTAQCApm2OumD17ds3/xtdr0477bS0wAIL1JgFa/jw4Wmttdaa81ICAACNwhwFkBdffLGqBeTVV1/NA8/L4u8111wznXDCCXNeSgAAoFGY41mwwn777ZcuueSS1K5du0qVCwAAaIQqMgbkmmuuyeHj3XffTQ899FDVqugzGhsCAAA0TRUJIF9++WXq1atXXoxw2223TZ988knefsABB6Tjjz++EqcAAAAagYoEkGOPPTa1aNEir/lRfSD67rvvnh588MFUaR999FHae++906KLLpratGmTVl999fT8889XPR4tLzEofvHFF8+Pb7nllumdd96peDkAAIB6CCAPP/xw+uMf/5iWXHLJGttXWGGF9P7776dKGjduXOrRo0cOPA888EB644030p///Oe0yCKLVO1z/vnnp0svvTQNHDgwz8S14IILpt69e6fJkydXtCwAAECBg9DLJk2aVKPlo3rXrFatWqVKiqDTtWvXPO6krPpih9H6cfHFF6dTTjkl7bjjjnnb4MGDU+fOndOdd96Z9thjj4qWBwAAKLgFZLPNNsuV/LJYF2TatGm5JWKLLbZIlXT33Xen9dZbL+22226pU6dOae21106DBg2qenzUqFFpzJgxudtVWfv27dOGG26Ynn766YqWBQAAqIcWkAgaMQg9xmF899136aSTTkqvv/56bgF58sknUyWNHDkyXXnllXkRxN///vfpueeeS0cffXRed6RPnz45fIRo8agu7pcfq8uUKVPyrWzixIkVLTcAAFChFpDVVlstvf3222nTTTfN3Z6iS9Yuu+ySFypcbrnlUiVFy8o666yTzj333Nz6cfDBB6eDDjooj/eYEwMGDMgtJeVbdPMCAADmwRaQEJX2k08+Oc1tMbNV9+7da2xbZZVV0u23357/7tKlS/73008/zfuWxf211lprhsft379/blWp3gIihAAAwDwaQGJ2qquvvjq9+eab+X6EhFghvUOHDqmSYgast956q8a2aH1ZeumlqwakRwgZOnRoVeCIMBGzYR122GEzPG4Mlq/0gHkAAGAudMEaNmxYWmaZZfLUtxFE4hZ/RxiIxyrpuOOOS88880zughUrr994443pr3/9azriiCOqBsDHuiRnn312HrD+6quvpn322SctscQSaaeddqpoWQAAgHpoAYnKfyw6GIPDmzdvnrdNnTo1HX744fmxCAGVsv7666c77rgjd5k688wzc8iJaXf32muvqn1iEHyMQ4nxIePHj89jU2JBxNatW1esHAAAwKxrVoqFM+ZQrDb+0ksvpZVWWqnG9ugqFd2gvv3229TQRLetGNcyYcKE1K5du3opw3kvfl4v5wUAYN7Wb+2ODbaeXJEuWDErVXnsR3Wxbc0116zEKQAAgKbcBeuVV16p+jvW4TjmmGPymIyNNtoob4txGpdffnk677zzKlNSAACg6XbBmm+++fKA7596euwT40EaGl2wAACYV/VrwF2wZrsFZNSoUbP7VAAAoIma7QBSXncDAACg0EHoAAAAM0MAAQAACiOAAAAAhRFAAACAwgggAABAwwsg2223Xfrkk0+m+xsAAKDiAWTYsGHp22+/ne5vAACAMl2wAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAA0vACy9NJLpxYtWkz3NwAAQNn8qUJee+21Ov8GAAAo0wULAAAojAACAAAURgABAAAKI4AAAAANJ4BMnTo1DRs2LI0fP74yJQIAABqtOQ4gzZs3T1tttVUaN25cZUoEAAA0WhXpgrXaaqulkSNHVuJQAABAI1aRAHL22WenE044Id17773pk08+SRMnTqxxAwAAqNhChNtuu23+d4cddkjNmjWr2l4qlfL9GCcCAABQkQDy6KOPVuIwAABAI1eRANKzZ89KHAYAAGjkKrYOyOOPP5723nvvtMkmm6SPPvoob7v++uvTE088UalTAAAADVxFAsjtt9+eevfundq0aZNGjBiRpkyZkrdPmDAhnXvuuZU4BQAA0AhUbBasgQMHpkGDBqUWLVpUbe/Ro0cOJAAAABULIG+99VbafPPNp9vevn17K6QDAACVDSBdunRJ77777nTbY/zHsssuW4lTAAAAjUBFAshBBx2UjjnmmDR8+PC87sfHH3+cbrjhhrw44WGHHVaJUwAAAI1ARabh7devX5o2bVrq1atX+uabb3J3rFatWuUActRRR1XiFAAAQCNQkQASrR4nn3xyOvHEE3NXrK+//jp17949LbTQQpU4PAAA0EhUJICUtWzZMgcPAACAuRZAJk2alM4777w0dOjQNHbs2Nwdq7qRI0dW4jQAAEADV5EAcuCBB6bHHnss/e53v0uLL7547pIFAAAwVwLIAw88kO6777688CAAAMBcnYZ3kUUWSR06dKjEoQAAgEasIgHkrLPOSqeddlqeghcAAKDiXbDWXnvtGmM9Yvrdzp07p2WWWSa1aNGixr4jRoyY3dMAAACNyGwHkJ122qmyJQEAABq92Q4gp59+emVLAgAANHoVGQMCAABQ2DS8MQtWXWt/xLbWrVun5ZdfPu27775pv/32q8TpAACAphxAYgasc845J22zzTZpgw02yNueffbZ9OCDD6YjjjgijRo1Kh122GHphx9+SAcddFAlTgkAADTVAPLEE0+ks88+Ox166KE1tl911VXp4YcfTrfffntaY4010qWXXiqAAABAE1aRMSAPPfRQ2nLLLafb3qtXr/xY2HbbbdPIkSMrcToAAKApB5BYBf2ee+6ZbntsK6+QPmnSpNS2bdtKnA4AAGjKXbBOPfXUPMbj0UcfrRoD8txzz6X7778/DRw4MN8fMmRI6tmzZyVOBwAANOUAEuM6unfvnv7yl7+kf/3rX3nbSiutlB577LG0ySab5PvHH398JU4FAAA09QASevTokW8AAAAVDyATJ05M7dq1q/r7x5T3AwAAmrb552TxwU8++SR16tQpLbzwwnUuRFgqlfL2qVOnzmk5AQCAphxAHnnkkaoZrmLwOQAAwFwLINVntDK7FQAAUOgg9PHjx6dnn302jR07Nk2bNq3GY/vss0+lTgMAADT1ABILDu61117p66+/zgPOq48Hib8FEAAAoGIroccaH/vvv38OINESMm7cuKrbl19+6UoDAACVCyAfffRROvroo9MCCyxQicMBAACNVEUCSO/evdPzzz9fiUMBAACN2GyPAbn77rur/t5uu+3SiSeemN544420+uqrpxYtWtTYd4cddpizUgIAAE07gOy0007TbTvzzDOn22YhQgAAYI4DSO2pdgEAAAoZAwIAADBXA8jNN9880/uOHj06Pfnkk7N7KgAAoKkHkCuvvDKtssoq6fzzz09vvvnmdI9PmDAh3X///WnPPfdM66yzTvriiy/mtKwAAEBTHQPy2GOP5ZmwLrvsstS/f/+04IILps6dO6fWrVvnBQjHjBmTOnbsmPbdd9/02muv5ccAAICmbbYDSHl63bh9/vnn6Yknnkjvv/9++vbbb3PwWHvttfNtvvkMMwEAAP6fiqSDCBwxLe8xxxyT+vXrlw488MC07rrrFhI+zjvvvDzV77HHHlu1bfLkyemII45Iiy66aFpooYXSrrvumj799NO5XhYAAODHNejmieeeey5dddVVaY011qix/bjjjkv33HNPuu2223JXsY8//jjtsssu9VZOAACggQeQr7/+Ou21115p0KBBaZFFFqkx+P3qq69OF154YfrFL36RW2Kuueaa9NRTT6VnnnmmXssMAABNXYMNINHFarvttktbbrllje0vvPBC+v7772tsX3nlldNSSy2Vnn766XooKQAAUJFB6PUl1iAZMWJE7oJVW8y+1bJly7TwwgvX2B6zcMVjMzJlypR8K5s4cWKFSw0AAFS0BeS7775Lb731Vvrhhx/S3BKLGsZg9xtuuCFP+VspAwYMSO3bt6+6de3atWLHBgAAKhhAvvnmm3TAAQekBRZYIK266qrpgw8+yNuPOuqoPEtVJUUXq7Fjx+bFDeeff/58i4Hml156af47WjoiCI0fP77G82IWrC5duszwuLGWSYwfKd8i6AAAAPNgAInK+8svv5z+85//1GiViHEYt9xyS6qkXr16pVdffTW99NJLVbf11lsvD0gv/92iRYs0dOjQqudEq0yEoo033niGx23VqlVq165djRsAADAPjgG58847c9DYaKON8pocZdEa8t5776VKatu2bVpttdVqbItV2GPNj/L2aI3p27dv6tChQw4S0RIT4SPKBwAANPAA8tlnn6VOnTpNt33SpEk1AklRLrroorwIYixAGAPLe/funa644orCywEAAMyFABLdnu67777c0hDKoeNvf/vbj3Z7qpTo+lVddAO7/PLL8w0AAGhkAeTcc89N22yzTXrjjTfyDFiXXHJJ/jsW/4sB4gAAABUbhL7pppvmQegRPlZfffX08MMP5y5ZsfBfrEQOAABQkRaQWHX8kEMOSaeeemoaNGiQqwoAAMy9FpCY8vb222+f08MAAABNQEW6YO200055Kl4AAIC5Pgh9hRVWSGeeeWZ68skn85iPWJejuqOPProSpwEAABq4ZqVSqTSnB+nWrduMT9CsWRo5cmRqaCZOnJjat2+fJkyYUG+rop/34uf1cl4AAOZt/dbu2GDryRVpARk1alQlDgMAADRyFRkDUl00qFSgUQUAAGiEKhZABg8enNcAadOmTb6tscYa6frrr6/U4QEAgEagIl2wLrzwwrwOyJFHHpl69OiRtz3xxBPp0EMPTZ9//nk67rjjKnEaAACggatIALnsssvSlVdemfbZZ5+qbTvssENaddVV0x/+8AcBBAAAqFwXrE8++SRtsskm022PbfEYAABAxQLI8ssvn2699dbptt9yyy15jRAAAICKdcE644wz0u67756GDRtWNQYkFiUcOnRoncEEAABomirSArLrrrum4cOHp44dO6Y777wz3+LvZ599Nu28886VOAUAANAIVKQFJKy77rrpH//4R6UOBwAANEIVaQG5//7700MPPTTd9tj2wAMPVOIUAABAI1CRANKvX780derU6bbHiujxGAAAQMUCyDvvvJO6d+8+3faVV145vfvuu640AABQuQDSvn37NHLkyOm2R/hYcMEFK3EKAACgEahIANlxxx3Tsccem957770a4eP444/PK6IDAABULICcf/75uaUjulx169Yt31ZZZZW06KKLpgsuuMCVBgAAKjcNb3TBeuqpp9KQIUPSyy+/nNq0aZPWWGONtPnmm1fi8AAAQCNRsXVAmjVrlrbaaqt8AwAAqHgXrKeffjrde++9NbYNHjw4d8Hq1KlTOvjgg9OUKVPm5BQAAEAjMkcB5Mwzz0yvv/561f1XX301HXDAAWnLLbfM63/cc889acCAAZUoJwAA0NQDyEsvvZR69epVdf/mm29OG264YRo0aFDq27dvuvTSS9Ott95aiXICAABNPYCMGzcude7cuer+Y489lrbZZpuq++uvv34aPXr0nJUQAABoNOYogET4GDVqVP77u+++SyNGjEgbbbRR1eNfffVVatGixZyXEgAAaBTmKIBsu+22eazH448/nvr3758WWGCBtNlmm1U9/sorr6TllluuEuUEAACa+jS8Z511Vtpll11Sz54900ILLZSuu+661LJly6rH//73v5uWFwAAqEwA6dixYxo2bFiaMGFCDiDNmzev8fhtt92WtwMAAFR0JfS6dOjQwVUGAAAqMwYEAABgVgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIVpcAFkwIABaf31109t27ZNnTp1SjvttFN66623auwzefLkdMQRR6RFF100LbTQQmnXXXdNn376ab2VGQAAaKAB5LHHHsvh4plnnklDhgxJ33//fdpqq63SpEmTqvY57rjj0j333JNuu+22vP/HH3+cdtlll3otNwAAkFKzUqlUSg3YZ599lltCImhsvvnmacKECWmxxRZLN954Y/r1r3+d9/nvf/+bVllllfT000+njTbaaKaOO3HixNS+fft8vHbt2qX6cN6Ln9fLeQEAmLf1W7tjvZ17TuvJDa4FpLZ44aFDhw753xdeeCG3imy55ZZV+6y88sppqaWWygFkRqZMmZIvZvUbAABQWQ06gEybNi0de+yxqUePHmm11VbL28aMGZNatmyZFl544Rr7du7cOT/2Y2NLIsmVb127dp3r5QcAgKamQQeQGAvy2muvpZtvvnmOj9W/f//cmlK+jR49uiJlBAAA/n/zpwbqyCOPTPfee28aNmxYWnLJJau2d+nSJX333Xdp/PjxNVpBYhaseGxGWrVqlW8AAMDc0+BaQGLMfISPO+64Iz3yyCOpW7duNR5fd911U4sWLdLQoUOrtsU0vR988EHaeOON66HEAABAg20BiW5XMcPVXXfdldcCKY/riHEbbdq0yf8ecMABqW/fvnlgeozMP+qoo3L4mNkZsAAAgLmjwQWQK6+8Mv/785//vMb2a665Ju27777574suuijNN998eQHCmN2qd+/e6YorrqiX8gIAAA04gMzMsiWtW7dOl19+eb4BAADzjgY3BgQAAGi4BBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAYQQQAACgMAIIAABQGAEEAAAojAACAAAURgABAAAKI4AAAACFEUAAAIDCCCAAAEBhBBAAAKAwjTqAXH755WmZZZZJrVu3ThtuuGF69tln67tIAADQpDXaAHLLLbekvn37ptNPPz2NGDEirbnmmql3795p7Nix9V00AABoshptALnwwgvTQQcdlPbbb7/UvXv3NHDgwLTAAgukv//97/VdNAAAaLLmT43Qd999l1544YXUv3//qm3zzTdf2nLLLdPTTz9d53OmTJmSb2UTJkzI/06cODHVl8lff1Vv5wYAYN41cWLLejz3/6sfl0ql2Xp+owwgn3/+eZo6dWrq3Llzje1x/7///W+dzxkwYEA644wzptvetWvXuVZOAACYHdPXWov31Vdfpfbt28/y8xplAJkd0VoSY0bKpk2blr788su06KKLpmbNmtVr2QCauvi1LX4QGj16dGrXrl19FwegSSuVSjl8LLHEErP1/EYZQDp27JiaN2+ePv300xrb436XLl3qfE6rVq3yrbqFF154rpYTgFkT4UMAAah/s9Py0agHobds2TKtu+66aejQoTVaNOL+xhtvXK9lAwCApqxRtoCE6E7Vp0+ftN5666UNNtggXXzxxWnSpEl5ViwAAKB+NNoAsvvuu6fPPvssnXbaaWnMmDFprbXWSg8++OB0A9MBmPdFF9lY16l2V1kAGp5mpdmdPwsAAGAWNcoxIAAAwLxJAAEAAAojgAAAAIURQAAAgMIIIAAN1L777pt22mmnNK/43//+l5o1a5ZeeumlNK9YZpll8jTsP+Xll19OO+ywQ+rUqVNq3bp1fl7Mpjh27NhCygnQlAggADRpMWV7r169UocOHdJDDz2U3nzzzXTNNdekJZZYIq8fNbd8//33c+3YAPMyAQSgkfj5z3+ejj766HTSSSflynSXLl3SH/7wh6rH99xzz/yrfu1KcMeOHdPgwYPz/WnTpqUBAwakbt26pTZt2qQ111wz/fOf/6zaf9y4cWmvvfZKiy22WH58hRVWyJX1EM8Ja6+9dm4JifJUb6k599xz81pMCy+8cDrzzDPTDz/8kE488cRc1iWXXLLqOGWjR49Ov/nNb/L+sc+OO+6YW1nKyse94IIL0uKLL54WXXTRdMQRR1RV7OP877//fjruuONyeeJWlyeffDJNmDAh/e1vf8tlj9exxRZbpIsuuqjqNYXXX389/epXv0rt2rVLbdu2TZtttll67733qq5bvKZ4HbFWSXntqdqtQ7fcckvq2bNnbmW54YYb8mNx3lVWWSVvW3nlldMVV1wxy+89QEMigAA0Itddd11acMEF0/Dhw9P555+fK8VDhgzJj0VwuOeee9LXX39dtX/84v/NN9+knXfeOd+P8BFhZODAgbnCHZX3vffeOz322GP58VNPPTW98cYb6YEHHsgtBVdeeWUOMOHZZ5/N//773/9On3zySfrXv/5VdZ5HHnkkffzxx2nYsGHpwgsvzIsKRmV+kUUWyWU99NBD0yGHHJI+/PDDvH+EiN69e+eK/uOPP55DwkILLZS23nrr9N1331Ud99FHH80hIP6N137ttdfmW4jzRyCIaxDliVtdIqhFGLrjjjvSjJbG+uijj9Lmm2+ew0W8lhdeeCHtv//++XnhkksuSX/+859zGHrllVdy2aNL1zvvvFPjOP369UvHHHNMvnaxT4SQWDD3nHPOydsipMU1jtcC0GjFQoQANDx9+vQp7bjjjlX3e/bsWdp0001r7LP++uuX/u///i///f3335c6duxYGjx4cNXjv/3tb0u77757/nvy5MmlBRZYoPTUU0/VOMYBBxyQ9wvbb799ab/99quzPKNGjYrae+nFF1+crpxLL710aerUqVXbVlpppdJmm21Wdf+HH34oLbjggqWbbrop37/++uvzPtOmTavaZ8qUKaU2bdqUHnrooRrHjeeW7bbbblWvJ8TjF1100U9cyVLp97//fWn++ecvdejQobT11luXzj///NKYMWOqHu/fv3+pW7dupe+++67O5y+xxBKlc845Z7prf/jhh9e4NhdffHGNfZZbbrnSjTfeWGPbWWedVdp4441/sswADZUWEIBGZI011qhxP7omlQdSzz///LlLU7nrT4xvuOuuu3LLSHj33Xdza8gvf/nL3NpQvkWLSLmr0WGHHZZuvvnm3MUouno99dRTM1WuVVddNc033///fznRFWv11Vevut+8efPchapc1hgUHuWJFpByOaIb1uTJk6vKUj5uPLeu1zsrogVizJgxueUnjhn/RneoV199NT8eA+ujy1WLFi2me+7EiRNz606PHj1qbI/70apR3XrrrVf1d1z/eC0HHHBAjet99tln13iNAI3N/PVdAAAqp3YFOcYdxPiEsggbMQYhKunRNSvGcUS3plDumnXfffeln/3sZzWOE12PwjbbbJPHVdx///35+TF4O8ZdRNejWS3Xj5U1yrLuuutWhaXqYvzJzL7eWREBaLfddsu36AoV40HidUV3qLhOlRDd48rK13vQoEFpww03rLFf9VAF0NgIIABNyCabbJK6du2aB0PHOI6obJcr8d27d89B44MPPsghZUYiAPTp0yffolUgBpJHRb1ly5b58alTp85xOddZZ51cxpgWNwZ9z64o0+yUJ5633HLLVc2CFS1LEURibErt0BPlixmzYpxK9esW9zfYYIMZniNageJ5I0eOrGqFAmgKBBCAJiZmw4ouRm+//XYevF0W3Z1OOOGEPPA8WhE23XTTPDtUVKSjkh2BIwZMR8tEdFOaMmVKuvfee/MMTiHCQrQUxOxPMfg7ZnVq3779bJUxKuR/+tOf8sxX5dmlouUlBpZH16+4PzNiPY8Y+L7HHnvkcFUeMF9dvIboVhb7rLjiinkgegzWj1ae8sxcRx55ZLrsssvyPv3798+v65lnnskBY6WVVsohLAbWR2iJ7mnxvOi2VVcLTnVnnHFGnrksjhctUXFNn3/++TzbWN++fWfr2gHM64wBAWhionIfM1lFN6va4xbOOuusPAtTzIYVwSIqxdElqzwdbbQMRAU8WgRiVqjoKhSV9/IYk0svvTRdddVV+Zf9CA+za4EFFsjBYamllkq77LJLLkuMlYgxILPSIhLhJabAjWBQvetWddHyE+c7/vjjc3jYaKON0q233pqnx/3d735X1T0rZr+KblPRyhEhLLpOlVtDIkREYIhjxNiWCGF33313nqb4xxx44IH5PBFY4nlx7JjFq/r0vwCNTbMYiV7fhQAAAJoGLSAAAEBhBBAAAKAwAggAAFAYAQQAACiMAAIAABRGAAEAAAojgAAAAIURQAAAgMIIIAAAQGEEEAAAoDACCAAAUBgBBAAAKIwAAgAAFEYAAQAACiOAAAAAhRFAAACAwgggAABAKsr/B6wLHhqmeJqBAAAAAElFTkSuQmCC",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "🔍 **Detailed Insights**\n",
      "- **Company Overview**: Microsoft Corporation is a global technology leader that develops and supports software, services, devices, and solutions worldwide. Founded in 1975 and headquartered in Redmond, Washington, the company operates through three main segments: Productivity and Business Processes (including Office 365, LinkedIn, and Dynamics), Intelligent Cloud (Azure, server products, and enterprise services), and More Personal Computing (Windows, devices, gaming, and search advertising).\n",
      "- **Financial Health**: Microsoft demonstrates exceptional financial strength with a market capitalization of $3.34 trillion, making it one of the world's most valuable companies. The company maintains robust profitability with a 35.79% profit margin and $96.64 billion in net income. With $79.62 billion in cash reserves, a manageable debt-to-equity ratio of 32.63%, and strong free cash flow of $54.82 billion, Microsoft has ample resources to fund operations, investments, and shareholder returns.\n",
      "- **Growth Potential**: Microsoft's growth prospects are primarily driven by its leadership in AI and cloud computing. The company's strategic partnership with OpenAI positions it at the forefront of generative AI integration across its product suite. Azure cloud services continue to gain market share, while Microsoft 365 Copilot represents a significant opportunity to monetize AI capabilities within its productivity tools. The company's diversified revenue streams across enterprise software, cloud services, gaming (Xbox), and hardware provide multiple avenues for continued expansion.\n",
      "- **Risk Factors**: Key risks include: 1) Intense competition in cloud services from Amazon AWS and Google Cloud, 2) High valuation with a P/E ratio of 34.72, above the market average, 3) Regulatory scrutiny regarding market dominance and antitrust concerns, 4) Potential challenges in monetizing AI investments at scale, 5) Cybersecurity threats that could impact customer trust, and 6) Macroeconomic uncertainties that might affect enterprise IT spending.\n",
      "- **Investment Score**: 85/100\n"
     ]
    }
   ],
   "source": [
    "analyze_stock('MSFT')   # 🍏 Feel free to try other symbols here!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 7. 💡 Best Practices & Tips\n",
    "\n",
    "✔️ **Rate Limiting**: WaterCrawl is smart, but don't hammer sites! Consider sleep delays for big scrapes.\n",
    "\n",
    "✔️ **Error Handling**: Always check responses, catch exceptions, and log unexpected content.\n",
    "\n",
    "✔️ **Data Quality**: Validate what you scrape, and if investing, always double-check data from multiple sources.\n",
    "\n",
    "✔️ **Performance**: For mass crawling, consider async techniques or chunked batches.\n",
    "\n",
    "_**Note:** This demo is for educational purposes. Do not use AI output as investment advice!_\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## 8. 🌱 Next Steps & Remix Ideas\n",
    "\n",
    "🎯 Try analyzing more tickers or sectors\n",
    "\n",
    "📅 Add historical trends & time series charts\n",
    "\n",
    "🔄 Incorporate technical indicators\n",
    "\n",
    "🔥 Build a portfolio analyzer by looping over a stock list\n",
    "\n",
    "_Happy Crawling & Analyzing!_\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
